import numpy as np
import matplotlib.pyplot as plt

plt.clf()

#Definition des concentrations initiales
C_I2_i = 1.7E-3 #concentration en quantite de matiere initiale en diiode (mol.L-1)
C_Imoins_i = 3.4E-3 #concentration en quantite de matiere initiale en ion iodure (mol.L-1)

#Données expérimentales obtenues lors du suivi temporel
A=np.array([0,0.023,0.05,0.068,0.091,0.102,0.118,0.133,0.145,0.159,0.173,0.184,0.195,0.206,0.217,0.227,0.237,0.247,0.256,0.265,0.273,0.281,0.288,0.296,0.303,0.311,0.318,0.325,0.331,0.336,0.344,0.35,0.356,0.36,0.364,0.371,0.375,0.38,0.384,0.389,0.392,0.396,0.4,0.409,0.408,0.413,0.416,0.42,0.423,0.427,0.43,0.433,0.437,0.439,0.443,0.445,0.447,0.449,0.453,0.455,0.457,0.46,0.463,0.463,0.467,0.468,0.471,0.474,0.475,0.479,0.479,0.48,0.483,0.485,0.488,0.488,0.489,0.492,0.493,0.495,0.497,0.498,0.498,0.501,0.502,0.503,0.505,0.507,0.508,0.508,0.51,0.511,0.513,0.512,0.515,0.516,0.517,0.517,0.518,0.52,0.52,0.522,0.522,0.522,0.523,0.525,0.525,0.526,0.527,0.529,0.531,0.531,0.531,0.532,0.534,0.534,0.534,0.535,0.535,0.536,0.537,0.538,0.538,0.539,0.54,0.542,0.541,0.542,0.543,0.542,0.544,0.543,0.544,0.545,0.545,0.547,0.547,0.548])
t=np.array([0,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,630,640,650,660,670,680,690,700,710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930,940,950,960,970,980,990,1000,1010,1020,1030,1040,1050,1060,1070,1080,1090,1100,1110,1120,1130,1140,1150,1160,1170,1180,1190,1200,1210,1220,1230,1240,1250,1260,1270,1280,1290,1300,1310,1320,1330,1340,1350,1360,1370])
Af=0.5480 #reperage de la valeur finale de l'Absorbance

#Calculer les concentrations au cours du temps
C_I2 = A*C_I2_i/Af
C_Imoins=[]
C_Imoins=C_Imoins_i-2*C_I2

#Calculer les vitesses volumiques en fonction du temps
v_fI2=[]
for i in range (1, len(t)-1):
    v_fI2.append((C_I2[i+1]-C_I2[i-1])/20)

v_dImoins=[]
for i in range (1, len(t)-1):
    v_dImoins.append(-(C_Imoins[i+1]-C_Imoins[i-1])/20)

#suppression de la première valeur et de la dernière valeur du temps
t=np.delete(t, 0)
t=np.delete(t, -1)

#suppression de la première valeur et de la dernière valeur de la concentration
#en ion iodure
C_Imoins=np.delete(C_Imoins, -1)
C_Imoins=np.delete(C_Imoins, 0)

#Tracer la vitesse volumique de formation du diiode en fonction de la concentration en ion iodure
plt.plot(C_Imoins, v_fI2, color = 'g' , marker = '.')
plt.xlabel('Concentration en tBuCl (mol.L-1)')
plt.ylabel('Vitesse volumique de disparition de tBuCl (mol.L-1.min-1)')
plt.title('Test d une loi de vitesse d ordre 1')
plt.grid()
plt.show() 

#Modéliser la courbe précédente par une droite affine et afficher les valeurs de a et b
a,b=np.polyfit(C_Imoins, v_fI2, 1)
print("Valeur de a = ",a," Valeur de b = ",b) 

#Calculer les coordonnées de 20 points de la droite précédente
Sim_C_Imoins=np.linspace(0, 3.4E-3, 20)
Sim_v_fI2=(a*Sim_C_Imoins+b)

#Tester une loi de vitesse d'ordre 1
plt.plot(C_Imoins, v_fI2, color = 'g' , marker = '+')
plt.plot(Sim_C_Imoins, Sim_v_fI2, color = 'r')
plt.xlabel('Concentration en Imoins (mol.L-1)')
plt.ylabel('Vitesse volumique de formation de I2 (mol.L-1.min-1)')
plt.title('Test d une loi de vitesse d ordre 1')
plt.grid()
plt.show() 